/*
 * Lista.h
 *
 *  Created on: 03/09/2013
 *      Author: cesar
 */

#ifndef LISTA_H_
#define LISTA_H_

const int ERROLISTACHEIA = -2;
const int ERROLISTAVAZIA = -1;
const int ERROPOSICAO = -3;
const int ERROELEMENTONAOENCONTRADO = -4;

template<class T>
class Lista {

	T *dados;
	int ultimo;
	int tamanho;

public:
	Lista(int t);
	virtual ~Lista();

	int Adiciona(T elemento);

	T Retira();

	T RetiraDoInicio();

	int AdicionaNoInicio(T elemento);

	int AdicionaNaPosicao(T elemento, int posicao);

	T RetiraDaPosicao(int posicao);

	T RetiraEspecifico(T elemento);

	int AdicionaEmOrdem(T elemento);

	void Limpar();

	int ObtemUltimo();

	T ObtemElemento(int pos);

	bool EstaVazia();

private:
	inline void Inicializa();
	bool EstaCheia();

	int PosicaoDoElemento(T elemento);


};

#include "Lista.hpp"
#endif /* LISTA_H_ */
